"""接口
"""

"""接口
接口与多态有关, 在Python中, 不显式地指定对象必须包含哪些方法。
Python只能假设所有对象都能完成工作, 使用hasattr来检查所需方法是否存在。
在其他语言中，例如Java和Go都采用显式指定接口的理念, 后来, Python通过模块abc提供了官方解决方案。
这个模块为所谓的抽象基类提供了支持， 一般来说, 抽象基类是不能实例化的, 其职责是定义子类应实现的一组抽象方法。
"""
from abc import ABC, abstractmethod

class Talker(ABC):

    # @abstractmethod用来标记方法为抽象类, 子类中必须实现该方法
    @abstractmethod
    def talk(self):
        pass

# 抽象类不能实例化
#Talker() # TypeError: Can't instantiate abstract class Talker with abstract methods talk

# 派生一个子类
class Knigget(Talker):

    def talk(self):
        print("hi")

k = Knigget()
print(isinstance(k, Talker)) #True, 检查给定的实例是否是Talker对象
k.talk() # hi

# Knigget有可能是从他人的模块中导入的, 这种情况下, 就不能使用这种做法,
# 为了解决这个问题, 可将Knigget注册到Talker
#Talker.register(Knigget)




